#案例：直接赋值=、深拷贝、浅拷贝的区别！


#赋值:其实就是对象的引用（别名）。
a={1: [1,2,3]}
b=a
# print(a)
# print(b)
# #输出变量a和变量b的内存地址，发现完全一样。意味着：a和b指向同一个内存单元！
print(id(a)) #30964184
print(id(b)) #30964184
# #改变变量a的值
a[1].append(4) #a={1:[1,2,3,4]}
print(a)
print(b)


print("------------------------")

# 浅拷贝(copy)：拷贝父对象，不会拷贝对象的内部的子对象。
a={1:20,2:[1,2,3,4]}
b=a.copy()
print(a)
print(b)
#发现a和b变量的地址不一样
print(id(a)) #31030152
print(id(b))#31030368

# a[1]=200 #改a变量的普通成员。a和b变量的普通成员是分别独立的
a[2].append(5) #改a变量的子对象。a和b变量的子对象是共用的
print(a)
print(b)


print("--------------------------------------------")
#深拷贝(deepcopy)： copy 模块的 deepcopy 方法，完全拷贝了父对象及其子对象。
import copy

a={1:20,2:[1,2,3,4]}
b=copy.deepcopy(a)
print(a)
print(b)
#发现a和b的内存地址不一样
# print(id(a)) #34634200
# print(id(b)) #34634344

# a[1]=200 #改a变量的普通成员。a和b变量的普通成员是分别独立的
a[2].append(5) #改a变量的子对象。a和b变量的子对象也是分别独立的
print(a)
print(b)
